/**
 * 
 */
package DAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

import POJO.DanhMuc;
import POJO.SanPham;
import Util.DataProvider;

/**
 * @author THIEUQUANG
 * 
 */

public class SanPhamDAO
{
    /**
     * Lấy danh sách sản phẩm
     *@return ArrayList
     */
    public static ArrayList<SanPham> SelectSanPhamALL()
    {
        ArrayList<SanPham> listSanPham = new ArrayList<SanPham>();
        try
        {
            String sql = "SELECT * FROM SANPHAM";
            DataProvider dp = new DataProvider();
            dp.open();

            ResultSet rs = dp.ExecuteQuery(sql);
            while (rs.next())
            {
                SanPham sp = new SanPham();
                sp.setMaSanPham(rs.getInt("MaSanPham"));
                sp.setTenSanPham(rs.getNString("TenSanPham"));
                sp.setMoTa(rs.getNString("MoTa"));
                sp.setDonGia(rs.getFloat("DonGia"));
                sp.setSoLuongTon(rs.getInt("SoLuongTon"));
                sp.setSoLuongToiThieu(rs.getInt("SoLuongToiThieu"));
                sp.setNgayDang(rs.getString("NgayDang"));
                sp.setTinhTrang(rs.getNString("TinhTrang"));
                sp.setMaDanhMuc(rs.getInt("MaDanhMuc"));

                listSanPham.add(sp);
            }
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return listSanPham;
    }

    /**
     * Rút trích một sản phẩm theo mã
     * @param Mã sản phẩm
     * @return Đối tượng SanPham
     */
    
    public static SanPham SelectSanPhamById(String SanPhamID)
    {
        SanPham sp = new SanPham();
        try
        {
            String sql = "SELECT * FROM SANPHAM WHERE MASANPHAM = " + SanPhamID;
            DataProvider dp = new DataProvider();
            dp.open();

            ResultSet rs = dp.ExecuteQuery(sql);
            while (rs.next())
            {
                sp.setMaSanPham(rs.getInt("MaSanPham"));
                sp.setTenSanPham(rs.getNString("TenSanPham"));
                sp.setMoTa(rs.getNString("MoTa"));
                sp.setDonGia(rs.getFloat("DonGia"));
                sp.setSoLuongTon(rs.getInt("SoLuongTon"));
                sp.setSoLuongToiThieu(rs.getInt("SoLuongToiThieu"));
                sp.setNgayDang(rs.getString("NgayDang"));
                sp.setTinhTrang(rs.getNString("TinhTrang"));
                sp.setMaDanhMuc(rs.getInt("MaDanhMuc"));
            }
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return sp;
    }
    
    /**
     * Thêm một sản phẩm
     * @param Đối tượng SanPham
     * @return boolean
     */

    public static boolean InsertSanPham(SanPham sp)
    {
        boolean kq = false;

        String sql = String
                .format("INSERT INTO SANPHAM (TENSANPHAM, MOTA, DONGIA, SOLUONGTON, SOLUONGTOITHIEU, NGAYDANG, TINHTRANG, MADANHMUC) VALUES(N'%s', N'%s', %f, %d, %d, '%s', N'%s', %d)",
                        sp.getTenSanPham(), sp.getMoTa(), sp.getDonGia()*1.0, sp.getSoLuongTon(),
                        sp.getSoLuongToiThieu(), sp.getNgayDang(),
                        sp.getTinhTrang(), sp.getMaDanhMuc());
        
        DataProvider dp = new DataProvider();
        try
        {
            dp.open();
            int i = dp.executeUpdate(sql);
            if (i == 1)
                kq = true;
            dp.close();
        }
        catch (ClassNotFoundException | SQLException e)
        {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        }
        return kq;
    }

    /**
     * Cập nhật sản phẩm
     * @param đối tượng SanPham
     * @return boolean
     */
    
    public static boolean UpdateSanPhamById(SanPham sp)
    {
        boolean kq = false;

        String sql = String
                .format("UPDATE SANPHAM SET TENSANPHAM=N'%s', MOTA=N'%s', DONGIA=%f, SOLUONGTON=%d, SOLUONGTOITHIEU=%d, NGAYDANG='%s', TINHTRANG=N'%s', MADANHMUC=%d WHERE MASANPHAM=%d",
                        sp.getTenSanPham(), sp.getMoTa(), sp.getDonGia()*1.0,
                        sp.getSoLuongTon(), sp.getSoLuongToiThieu(),
                        sp.getNgayDang(), sp.getTinhTrang(), sp.getMaDanhMuc(),
                        sp.getMaSanPham());
        try
        {
            DataProvider dp = new DataProvider();
            dp.open();
            int i = dp.executeUpdate(sql);
            if (i == 1)
                kq = true;
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return kq;
    }
    
    /**
     * Xóa một sản phẩm
     * @param Mã sản phẩm
     * @return boolean
     */

    public static boolean DeleteSanPhamById(String MaSanPham)
    {
        boolean kq = false;

        String sql = String.format("DELETE FROM SANPHAM WHERE MASANPHAM=%s",
                MaSanPham);

        try
        {
            DataProvider dp = new DataProvider();
            dp.open();
            int i = dp.executeUpdate(sql);            
            if (i == 1)
                kq = true;

            dp.close();

        }
        catch (Exception e)
        {
            // TODO: handle exception
        }

        return kq;
    }
    
    /**
     * Tìm kiếm sản phẩm thông tên
     * @param thông tin 
     * @return danh sách sản phẩm
     */
    
    public static ArrayList<SanPham> SearchSanPhamByName(String name)
    {
        ArrayList<SanPham> listSanPham = new ArrayList<SanPham>();
        try
        {
            String sql = "SELECT * FROM SANPHAM WHERE TENSANPHAM LIKE '%"+ name +"%'";
            DataProvider dp = new DataProvider();
            dp.open();

            ResultSet rs = dp.ExecuteQuery(sql);
            while (rs.next())
            {
                SanPham sp = new SanPham();
                sp.setMaSanPham(rs.getInt("MaSanPham"));
                sp.setTenSanPham(rs.getNString("TenSanPham"));
                sp.setMoTa(rs.getNString("MoTa"));
                sp.setDonGia(rs.getFloat("DonGia"));
                sp.setSoLuongTon(rs.getInt("SoLuongTon"));
                sp.setSoLuongToiThieu(rs.getInt("SoLuongToiThieu"));
                sp.setNgayDang(rs.getString("NgayDang"));
                sp.setTinhTrang(rs.getNString("TinhTrang"));
                sp.setMaDanhMuc(rs.getInt("MaDanhMuc"));

                listSanPham.add(sp);
            }
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return listSanPham;
    }
}
